/*
  强制缓存和协商缓存（注意：第一次请求资源没有效果，第二次请求相同资源缓存才会生效）

  1. 浏览器第一次请求该资源
    没有缓存，服务器返回资源，响应状态码200，同时携带响应头：
    强制缓存字段：Cache-Control: max-age=10000  Expires: 过期时间
      Cache-Control http 1.1 提出的
      Expires http 1.0 提出的
      因为主流http协议版本是1.1，所以主要使用Cache-Control
    协商缓存字段：Etag: 文件内容的唯一标识  Last-Modified: 文件最近一次修改时间

  2. 浏览器第二次以后请求该资源
    首先判断是否命中强制缓存（看缓存是否过期）
      没有过期，不会发送请求，直接读取缓存，响应状态码200
      过期了，看是否命中协商缓存
        一定会向服务器发送请求，同时携带请求头：
          If-None-Match(这个就是第一次请求服务器返回的Etag字段)
          If-Modified-Since(这个就是第一次请求服务器返回的Last-Modified字段)
        服务器将If-None-Match和当前文件的Etag进行比较，将If-Modified-Since和当前文件的Last-Modified比较。
        如果都相等，文件没有变化，服务器响应状态码304。（浏览器得到响应状态码304就会自动去缓存中找到该资源使用）
        如果有一个不相等，文件发生变化了，服务器返回新的资源，响应状态码200，同时携带新的响应头：Cache-Control/Etag/Last-Modified

  
  问题1：Cache-Control: no-cache; 什么意思？ 不走强制缓存，强制向服务器发送请求，可能会命中协商缓存
    Cache-Control: no-store; // 禁止一切缓存

  问题2：将js、css等资源强制缓存30天，万一强制缓存期间内资源发生变化需要更新，如何做？
    
    html文件不做强制缓存，最多协商缓存。

    但我们修改代码，重新打包，打包工具会给我们打包的文件（js/css）生成一个新的名字（文件hash发生变化）
    因为新的名字，所以请求时不会命中缓存，会加载新的资源
*/
